Código a ejecutar para empezar (de clic en donde en dice “Code”, para desplegar el código, y luego copie y pegue en una sesión abierta de R):
Code
# cambia idioma de la consola de R a español:Sys.setenv(LANG="es")# usar 2 cifras significativas y tiende a evitar # notación científica (ver ayuda de función: `options`): options(digits =2, scipen =999) # cargar librerías: if(!require(igraph)){install.packages("igraph"); library(igraph)}if(!require(sand)){install.packages("sand"); library(sand)}
Introducción
La visualización de redes incorpora aspectos matemáticos y algorítmicos junto con elementos estéticos.
La visualización de un grafo G=(V,E) consiste en crear representaciones geométricas de grafos utilizando símbolos para los vértices v \in V y curvas suaves para las aristas e \in E.
El objetivo consiste en comunicar adecuadamente la información relacional siguiendo los principios fundamentales de una visualización:
Propósito.
Claridad.
Simplicidad.
Escalas.
Títulos.
Etiquetas.
Colores.
Tamaños.
Formas.
Tomado de https://kateto.net/network-visualization .
Fundamentos de visualización de redes
¿Cuál es el propósito que debe cumplir la visualización?
¿Cuáles son las propiedades que se quieren resaltar?
Tomado de https://kateto.net/network-visualization .
Tipos de visualización de redes
Hay disponibles diferentes tipos de visualización.
Tomado de https://kateto.net/network-visualization .
Diseños
Uno de los temas centrales de la visualización de grafos es el diseño del grafo (graph layout), i.e., la ubicación de los vértices y las aristas en el espacio bidimensional.
Los grafos de tamaño no trivial deben dibujarse utilizando métodos automatizados.
Se usan algoritmos que solucionan los problemas de optimización derivados del propósito de la representación automática.
Los diseños buscan minimizar las superposiciones de vértices y el cruce de aristas.
Tomado de https://kateto.net/network-visualization .
Hay disponibles varios diseños en igraph, entre ellos:
layout_as_bipartite().
layout_as_star().
layout_as_tree().
layout_in_circle().
layout_nicely().
layout_on_grid().
layout_on_sphere().
layout_randomly().
layout_with_dh().
layout_with_fr().
layout_with_gem().
layout_with_graphopt().
layout_with_kk().
layout_with_lgl().
layout_with_mds().
layout_with_sugiyama().
Estos diseños producen un arreglo de n\times 2, con n = |V|, con las coordenadas de los vértices en \mathbb{R}^2 que se emplean en la visualización.
Ejemplo: Reforma Tributaria en Colombia
Red de influencia en Twitter (ahora X) sobre la Reforma Tributaria en Colombia, en el contexto de su aprobación en el Congreso.
Estos datos fueron recolectados para estudiar las dinámicas de interacción entre usuarios de la red social, en relación con las opiniones sobre la Reforma Tributaria.
Los usuarios están conectados mediante aristas ponderadas por el número de interacciones (tuits, retuits, citas y comentarios) relacionadas con el tema.
Si bien la posición de los vértices y la ubicación de las aristas es importante en la visualización de grafos, la información adicional se puede incorporar en las visualizaciones variando características como el tamaño, la forma y el color de los vértices y las aristas.
Visualización
Code
par(mfrow =c(1, 2), mar =c(4, 3, 3, 1))# Grafo no decoradoplot(g, layout = l_fr, vertex.label =NA, vertex.size =4, vertex.color ="black", vertex.frame.color ="black", edge.arrow.size =0.2)title(main ="Interacciones sociales")# Decoración# Etiquetas: solo mostrar a "petrogustavo"V(g)$label <-NAV(g)["petrogustavo"]$label <-"Gustavo Petro"# FormasV(g)$shape <-"circle"V(g)["petrogustavo"]$shape <-"rectangle"# Colores con transparenciaV(g)[Grupo ==1]$color <-rgb(1, 0, 0, 0.6) # rojo con 60% opacidadV(g)[Grupo ==2]$color <-rgb(0.12, 0.56, 1, 0.6) # azul claro con 60% opacidadF1 <-V(g)[Grupo ==1]F2 <-V(g)[Grupo ==2]# Bordes de aristasE(g)[F1 %--% F1]$color <-"pink"E(g)[F2 %--% F2]$color <-"lightblue"E(g)[F1 %--% F2]$color <-"yellow"# Tamaños generalesV(g)$size <-2*log(degree(g))V(g)["petrogustavo"]$size <-43# Bordes del mismo color que el nodoV(g)$frame.color <-V(g)$color# Grafo decoradoplot(g, layout = l_fr, vertex.frame.color =V(g)$frame.color, vertex.label.color ="black", edge.arrow.size =0.2, vertex.label.cex =0.8)title(main ="Interacciones sociales")